#include<iostream>
using namespace std;
#include<list>
/*
案例描述：将Person自定义数据类型进行排序，Person中属性有姓名，年龄，身高
排序规则：按照年龄进行升序，如果年龄相同按照身高进行降序
*/
class Person
{
public:
    Person(string name,int age,int height)
    {
        this->m_Name=name;
        this->m_Age=age;
        this->m_Height=height;
    }
    string m_Name;//姓名
    int m_Age;//年龄
    int m_Height;//身高
};
bool comparePerson(Person &p1,Person &p2)
{
    //按照年龄升序
    if(p1.m_Age==p2.m_Age)
    {
        //年龄相同，按照身高降序
        return p1.m_Height>p2.m_Height;
    }
    return p1.m_Age<p2.m_Age;
}
void test01()
{
    list<Person> l;//创建容器
    Person p1("刘备",23,343);
    Person p2("曹操",12,123);
    Person p3("张飞",43,187);
    Person p4("关羽",12,178);
    //插入数据
    l.push_back(p1);
    l.push_back(p2);
    l.push_back(p3);
    l.push_back(p4);
    for(list<Person>::iterator it=l.begin();it!=l.end();it++)
    {
        cout<<"姓名："<<(*it).m_Name<<" 年龄："<<(*it).m_Age<<" 身高："<<(*it).m_Height<<endl;
    }
    //排序
    cout<<"排序后："<<endl;
    l.sort(comparePerson);
    for(list<Person>::iterator it=l.begin();it!=l.end();it++)
    {
        cout<<"姓名："<<(*it).m_Name<<" 年龄："<<(*it).m_Age<<" 身高："<<(*it).m_Height<<endl;
    }
}
int main()
{
    test01();
}